package thefirst.member.model;

import java.sql.SQLException;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import thefirst.code.model.CodeDao;
import thefirst.code.model.CodeVO;
import thefirst.common.PagingBean;
import thefirst.support.model.HelpListVO;
import thefirst.support.model.HelpVO;

/**
 * MemberServiceImpl
 * 회원들에게 제공되는 서비스를 제공하는 클래스
 * @author kosta-00-30
 *
 */
@Service
public class MemberServiceImpl implements MemberService{
	@Resource(name="studentOfMemberDaoImpl")
	private MemberDao studentOfmemberDao;	
	
	@Resource(name="studentOfMemberDaoImpl")
	private StudentOfMemberDaoImpl studentOfMemberDaoImpl;
	
	@Resource(name="teacherOfMemberDaoImpl")
	private MemberDao teacherOfmemberDao;
	@Resource(name="teacherOfMemberDaoImpl")
	private TeacherOfMemberDaoImpl teacherOfmemberDaoImpl;
	@Resource(name="codeDaoImpl")
	private CodeDao codeDao;	
	@Override
	public void registerMember(MemberVO mvo) throws SQLException {
		if(mvo.getMembertype().equals("s")){
			studentOfmemberDao.registerMember(mvo);	
		}else if(mvo.getMembertype().equals("t")){
			teacherOfmemberDao.registerMember(mvo);
		}
	}
	
	// 회원의 정보를 조회하는 메서드 
	@Override
	public MemberVO showMember(MemberVO mvo) throws SQLException {
		MemberVO rmvo=null;
		
		if(mvo.getMembertype().equals("s")){
			rmvo=studentOfmemberDao.showMember(mvo);
		}else if(mvo.getMembertype().equals("t")){
			rmvo=teacherOfmemberDao.showMember(mvo);
		}
		rmvo.setId(mvo.getId());
		return rmvo;
	}
	@Override
	public int isExistId(MemberVO mvo) throws SQLException {	
		int result=0;
		if(mvo.getMembertype().equals("t")){
			result=teacherOfmemberDao.isExistId(mvo);	
			System.out.println("service:"+result);
			
		}else if(mvo.getMembertype().equals("s")){
			result=studentOfmemberDao.isExistId(mvo);	
		}
		return result;
	}
	/*@Override
	public int upload(TeacherVO tvo) throws SQLException{
		return teacherOfmemberDao.upload(tvo);
	}*/
	
	/**
	 * updateMember 를 실행하는 메서드
	 * MemberVO의 있는 내용만 수정한다.
	 * 선생님인지 학생인지 구분하고
	 * 변경된 항목에 따라 다른 Dao계층의 메서드를 호출한다.
	 * update가 무사히 이루어지면 showMember를 통해 변경된 사항을 로딩한다.
	 */
	@Override
	public MemberVO updateMember(MemberVO mvo) throws SQLException {
		// TODO Auto-generated method stub
		MemberVO rmvo=null;
		
		if(mvo.getMembertype().equals("s")){//학생정보 관련 메서드
			if(mvo.getName()!=null){
				if(studentOfmemberDao.updateName(mvo)==1){
					rmvo=studentOfmemberDao.showMember(mvo);
				}
			}
		}else if(mvo.getMembertype().equals("t")){//선생님정보 관련 메서드
			if(mvo.getName()!=null){
				if(teacherOfmemberDao.updateName(mvo)==1){
					rmvo=teacherOfmemberDao.showMember(mvo);
				}
			}else if(mvo.getGender()!=null){
				if(teacherOfmemberDao.updateGender(mvo)==1){
					rmvo=teacherOfmemberDao.showMember(mvo);
				}
			}else if(mvo.getTel()!=null){
				if(teacherOfmemberDao.updateTel(mvo)==1){
					rmvo=teacherOfmemberDao.showMember(mvo);
				}
			}else if(mvo.getEmail()!=null){
				if(teacherOfmemberDao.updateEmail(mvo)==1){
					rmvo=teacherOfmemberDao.showMember(mvo);
				}
			}else if(mvo.getHoperegion()!=null){
				if(teacherOfmemberDao.updateHoperegion(mvo)==1){
					rmvo=teacherOfmemberDao.showMember(mvo);
				}
			}	
		}
		return rmvo;
	}
	
	/**
	 * updateTeacher,updateStudent
	 * 두개의 메서드는 공통적이지 않은 사항들을 수정한다.
	 */
	@Override
	public MemberVO updateTeacher(TeacherVO tvo) throws SQLException {
		// TODO Auto-generated method stub
		MemberVO rmvo=null;
		if(tvo.getHopesubject()!=null){
			if(teacherOfmemberDaoImpl.updateHopesubject(tvo)==1){
				rmvo=teacherOfmemberDao.showMember(tvo);
			}
		}else if(tvo.getHopegender()!=null){
			if(teacherOfmemberDaoImpl.updateHopegender(tvo)==1){
				rmvo=teacherOfmemberDao.showMember(tvo);
			}
		}else if(tvo.getAvailablestudent()!=null){
			if(teacherOfmemberDaoImpl.updateAvailablestudent(tvo)==1){
				rmvo=teacherOfmemberDao.showMember(tvo);
			}
		}else if(tvo.getAvailableday()!=null){
			if(teacherOfmemberDaoImpl.updateAvailableday(tvo)==1){
				rmvo=teacherOfmemberDao.showMember(tvo);
			}
		}else if(tvo.getAvailabletime()!=null){
			if(teacherOfmemberDaoImpl.updateAvailabletime(tvo)==1){
				rmvo=teacherOfmemberDao.showMember(tvo);
			}
		}else if(tvo.getUniversity()!=null){
			if(teacherOfmemberDaoImpl.updateUniversity(tvo)==1){
				rmvo=teacherOfmemberDao.showMember(tvo);
			}
		}else if(tvo.getIntro()!=null){
			if(teacherOfmemberDaoImpl.updateIntro(tvo)==1){
				rmvo=teacherOfmemberDao.showMember(tvo);
			}
		}
		return rmvo;
	}

	@Override
	public MemberVO updateStudent(StudentVO svo) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}
	
	/**
	 * 아이디와 패스워드를 입력받아 학생Dao와
	 * 선생님Dao 접근해서 rmvo가 null이 아니면 학생이며
	 * rmvo가 null 이면 선생님이다.
	 */
	@Override
	public MemberVO login(MemberVO mvo) throws SQLException {
		MemberVO rmvo=
				studentOfmemberDao.login(mvo);
		if(rmvo==null){
			rmvo=teacherOfmemberDao.login(mvo);
			if(rmvo==null){
			System.out.println("MemberServiceImpl login : 선생님, 학생 테이블 둘다 아이디가 없습니다.");
			}else{
			rmvo.setMembertype("t");
			rmvo.setId(mvo.getId());
			}
		}else{//학생 테이블에 회원 존재..
			rmvo.setMembertype("s");
			rmvo.setId(mvo.getId());
		}
		return rmvo;
	}
	/**
	 * 학생찾기 첫페이지에 필요한 tableList가져오기
	 */
	@Override
	public StudentListVO getStudentListBasic(String pageNo) throws SQLException {
		int pn=1;
		if(pageNo!=null){// null 이 아니면 int 형으로 변환한 후 페이지 번호를 할당한다. 
			pn=Integer.parseInt(pageNo);
		}
		List<?> list=studentOfmemberDao.getMemberListBasic(Integer.parseInt(pageNo));
		int total=studentOfmemberDao.selectTotalMemberCount();
		PagingBean pagingBean=new PagingBean(total,pn);
		return new StudentListVO(list, pagingBean);	
	}
	/**
	 * 학생찾기페이지-학년별 tab-학년과 이름을 받아서 검색
	 * 학생 이름은 없을 수도 있다.
	 */
	@Override
	public StudentListVO getSearchStudentbyGrade(MemberSearchVO memberSearchVO)
			throws SQLException {
		System.out.println("서비스"+memberSearchVO.toString());
		List<?> list; 
	
		if(memberSearchVO.getPageNo() ==null){// null 이 아니면 int 형으로 변환한 후 페이지 번호를 할당한다. 
			memberSearchVO.setPageNo("1");	//페이지번호를 1로 setting
		}
		if(memberSearchVO.getName()==null){	//검색 폼에서 이름을 입력하지 않은 경우
			list= studentOfMemberDaoImpl.getListStudentbyGrade(memberSearchVO);			
		} else{			//검색 폼에서 이름을 입력한 경우
			list=studentOfMemberDaoImpl.getListStudentbyGradeAndName(memberSearchVO);			
		}
		System.out.println("전체 리스트의 수 "+list.size()+"전체 리스트 "+list.toString());
		int total=list.size();	//리스트의 카운트 가져오기
		PagingBean pagingBean=new PagingBean(total, Integer.parseInt(memberSearchVO.getPageNo()));
		return  new StudentListVO(list, pagingBean);
	}
	/**
	 * 학생검색에서 희망과목 셀렉트박스에 보여줄 시도를 codeMaster에서 가져온다.
	 */	
	@Override
	public List<CodeVO> sidoList() throws SQLException {
		List<CodeVO> listVo=codeDao.getCodeList("F000");
		return listVo;
	}
	/**
	 * 학생검색에서 희망과목 셀렉트박스에 보여줄 과목명을 codeMaster에서 가져온다.
	 */
	@Override
	public List<CodeVO> hopeSubjectList() throws SQLException {
		List<CodeVO> listVo=codeDao.getCodeList("C000");
//		System.out.println("listVo"+listVo);
		return listVo;
	}

	/**
<<<<<<< .mine
	 * 이름과 이메일을 이용하여 ID를 가져온다.
	 * 학생에서 없을 경우 -> 선생님
	 * 선생님에서 없을 경우 -> 메세지 출력 
=======
	 * 학생검색에서 성별 셀렉트박스에 보여줄 과목명을 codeMaster에서 가져온다.
	 */
	@Override
	public List<CodeVO> genderList() throws SQLException {
		List<CodeVO> listVo=codeDao.getCodeList("A000");
		return listVo;
	}
	/**
	 * 학생검색에서 학년 셀렉트박스에 보여줄 과목명을 codeMaster에서 가져온다.
	 */
	@Override
	public List<CodeVO> gradeList() throws SQLException {
		List<CodeVO> listVo=codeDao.getCodeList("D000");
		return listVo;
	}

	/**
	 * 학생찾기 페이지에서 시도를 선택한 다음 구군정보를 가져오기
	 * 파라미터는 시도의 코드번호(code_code)이다.
	 */
	@Override
	public List<CodeVO> gugunList(String code_type) throws SQLException {
		List<CodeVO> listVo=codeDao.getCodeList(code_type);
		return listVo;
	}

	/**
	 * 학생찾기 - 지역별 tab-첫페이지 가져오기
	 */
	@Override
	public StudentListVO getRegionList(String pageNo) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}
	/**
	 * 학생찾기 - 과목별 tab-첫페이지 가져오기
	 */
	@Override
	public StudentListVO getSubjectList(String pageNo) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}
	/**
	 * 학생찾기 - 학년별 tab-첫페이지 가져오기
	 */
	@Override
	public StudentListVO getGradeList(String pageNo) throws SQLException {
		int pn=1;
		if(pageNo!=null){// null 이 아니면 int 형으로 변환한 후 페이지 번호를 할당한다. 
			pn=Integer.parseInt(pageNo);
		}
		List<?> list=studentOfmemberDao.getMemberListBasic(Integer.parseInt(pageNo));
		int total=studentOfmemberDao.selectTotalMemberCount();
		PagingBean pagingBean=new PagingBean(total,pn);
		return new StudentListVO(list, pagingBean);
	}


	@Override
	public void withdrawalMember(MemberVO mvo) throws SQLException {
		// TODO Auto-generated method stub
		if(mvo.getMembertype().equals("s")){
			studentOfmemberDao.withdrawalMember(mvo);
		}else if(mvo.getMembertype().equals("t")){
			teacherOfmemberDao.withdrawalMember(mvo);
		}
	}


	/**
	 * 회원 이름과 이메일로 아이디를 찾아온다.
	 */
	@Override
	public String findIdByNameEmail(MemberVO mvo) throws SQLException {
		String id=studentOfmemberDao.findIdByNameEmail(mvo);
		System.out.println("service:"+id);
		if(id==null){
			id=teacherOfmemberDao.findIdByNameEmail(mvo);
			if(id==null){
				id="등록된 아이디가 없습니다.";
			}
		}
		return id;
	}
	@Override
	public MemberListVO getListForAdmin(String pageNo) throws SQLException {
		// TODO Auto-generated method stub
		MemberListVO svo=new MemberListVO();
		studentOfmemberDao.getListForAdmin(pageNo);
		return svo;
	}

	@Override
	public MemberVO findQPassByIdEmail(MemberVO mvo) throws SQLException {
		// TODO Auto-generated method stub
		MemberVO mvo1=studentOfmemberDao.findQPassByIdEmail(mvo);
		System.out.println("Qpass stu:"+mvo1);
		if(mvo1==null){
			mvo1=teacherOfmemberDao.findQPassByIdEmail(mvo);
			System.out.println("Qpass tea:"+mvo1);
		}
		return mvo1;
	}

	@Override
	public String findPasswordByQnAPass(MemberVO mvo) throws SQLException {
		String password=studentOfmemberDao.findPasswordByQnAPass(mvo);
		System.out.println(("password stu:"+password));
		if(password==null){
			password=teacherOfmemberDao.findPasswordByQnAPass(mvo);
			System.out.println("password tea:"+password);
		}
		return password;
	}
	/**
	 * 비밀번호찾기 검색에서 셀렉트박스에 보여줄 문제명을 codeMaster에서 가져온다.
	 */
	@Override
	public List<CodeVO> passwordList() throws SQLException {
		List<CodeVO> listVo=codeDao.getCodeList("G000");
		return listVo;
	}
	@Override
	public  MyHelpListVO myHelpList(MyHelpVO myHelpVO) throws SQLException {
		if(myHelpVO.getPageNo() ==null){// null 이 아니면 int 형으로 변환한 후 페이지 번호를 할당한다. 
			myHelpVO.setPageNo("1");	//페이지번호를 1로 setting
		}
		//System.out.println("나의 문의 내역 페이지 : "+myHelpVO.getPageNo());
		List<?> mhlist=studentOfmemberDao.getMyHelpList(myHelpVO);
		int total=mhlist.size();
		PagingBean pagingBean=new PagingBean(total, Integer.parseInt(myHelpVO.getPageNo()));
		return  new MyHelpListVO(mhlist, pagingBean);

	}

}
